#ifndef __FSM_EVT_H__
#define __FSM_EVT_H__

#include "fsm_msg.h"

typedef uint32_t (*evt_func)(fsm_msg_t *msg);

struct evt_list_t {
    struct evt_list_t *prev;
    struct evt_list_t *next;
    
    fsm_msg_t   msg_ctr;
    evt_func    func;      // 调用函数
};
extern struct evt_list_t  system_evt_node;

void fsm_evt_init(struct evt_list_t *n, uint8_t *evt_pool, evt_func func, uint32_t evt_pool_size, uint8_t evt_sgl_size);
int fsm_evt_write(struct evt_list_t *n, uint8_t *pData, uint8_t len);
int fsm_evt_read(struct evt_list_t *n, uint8_t *pData);
int fsm_evt_tasks(void);
void fsm_system_evt_init(void);

#define system_evt_pool_size    32
#define system_evt_sgl_size     4

// 空闲函数
extern void fsm_system_idle(void);
extern uint32_t fsm_system_evtfunc(fsm_msg_t *msg);

#endif
